#include <bits/stdc++.h>

using namespace std;

// 最多线段重合问题
// 测试链接 : https://www.nowcoder.com/practice/1ae8d0b6bb4e4bcdbf64ec491f63fc37
// 请同学们务必参考如下代码中关于输入、输出的处理
// 这是输入输出处理效率较高的写法
// 提交以下的code，可以直接通过

const int MAXN = 10001;
array<int, 2> lines[MAXN];
int heap[MAXN]; // 小根堆
int sz; // 堆的大小
int n;

int read()
{
    char ch = getchar();
    int x = 0, f = 1;
    while(ch < '0' || ch > '9')
    {
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
    {
        x = 10 * x + ch - '0';
        ch = getchar();
    }
    return f * x;
}

void pop()
{
    swap(heap[0], heap[--sz]);
    int i = 0, l = 1;
    while(l < sz)
    {
        int best = l + 1 < sz && heap[l + 1] < heap[l] ? l + 1 : l;
        best = heap[best] < heap[i] ? best : i;
        if(best == i) break;
        swap(heap[best], heap[i]);
        i = best; 
        l = 2 * i + 1;
    }
}

void push(int x)
{
    heap[sz] = x;
    int i = sz++;
    while(heap[i] < heap[(i - 1) / 2])
    {
        swap(heap[i], heap[(i - 1) / 2]);
        i = (i - 1) / 2;
    }
}

int compute()
{
    sz = 0; // 堆的清空
    // 线段一共有n条，line[0...n-1][2] : line[i][0]   line[i][1], 左闭右闭
    // 所有线段，根据开始位置排序，结束位置无所谓
    // 比较器的用法
    // line [0...n) 排序 : 所有小数组，开始位置谁小谁在前
    sort(lines, lines + n, [](auto& a, auto& b){
        return a[0] < b[0];
    });
    int ans = 0;
    for(int i = 0; i < n; ++i)
    {
        // i :  line[i][0] line[i][1]
        while(sz > 0 && heap[0] <= lines[i][0])
        {
            pop();
        }
        push(lines[i][1]);
        ans = max(ans, sz);
    }
    return ans;
}

int main()
{
    n = read();
    for(int i = 0; i < n; ++i)
    {
        lines[i][0] = read();
        lines[i][1] = read();
    }
    printf("%d\n", compute());

    return 0;
}